/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import control.CoderFactory;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Bram Gadeyne
 */
public class PDFCreator {
    private static PDFCreator creator;

    private Document document;
    
    private PDFCreator() {
        registerFonts();
    }

    public static PDFCreator getInstance()
    {
        if(creator==null)
        {
            creator=new PDFCreator();
        }
        return creator;
    }

    private void registerFonts()
    {
        FontFactory.register("resources/VRaam.TTF", "raamschrift"); //seems to work
    }

    public void createPDF(String location, List<SecretKeeper> secrets)
    {
        document=new Document();
        //document.open();
        //addMetaData();

        

        
        try {
            //BaseFont bf=BaseFont.createFont("resources/VRaam.TTF",BaseFont.WINANSI, BaseFont.EMBEDDED);
            BaseFont bf=BaseFont.createFont();
            Font f=new Font(bf,12);
            PdfWriter.getInstance(document, new FileOutputStream(location));
            document.open();
            for(SecretKeeper keeper:secrets){
                ICoder coder;
                try {
                    coder = CoderFactory.getInstance().getCoder(keeper.getCoder());
                    coder.setOptions(keeper.getOptions());
                    Paragraph p=new Paragraph(coder.code(location), f);
                    //p.setFont(FontFactory.getFont("raamschrift"));//font not printed correctly
                    document.add(p);
                } catch (Exception ex) {
                    Logger.getLogger(PDFCreator.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
            document.close();
        } catch (IOException ex) {
            Logger.getLogger(PDFCreator.class.getName()).log(Level.SEVERE, null, ex);
        } catch (DocumentException ex) {
            Logger.getLogger(PDFCreator.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void addMetaData()
    {
        document.addAuthor("Bram Gadeyne");
        document.addTitle("Coded with voetje.bramgadeyne.be");
    }

    private void addTitlePage()
    {
     /*   Paragraph preface = new Paragraph();
		// We add one empty line
        addEmptyLine(preface, 1);
		// Lets write a big header
        preface.add(new Paragraph("Generated with voetje.bramgadeyne.be", FontFactory.getFont(FontFactory.COURIER, 24f) ));


        addEmptyLine(preface, 1);
		// Will create: Report generated by: _name, _date
        preface.add(new Paragraph()"Report generated by: " + System.getProperty("user.name") + ", " + new Date(),smallBold));
        addEmptyLine(preface, 3);
        preface.add(new Paragraph("This document describes something which is very important ",smallBold));

	addEmptyLine(preface, 8);

        preface.add(new Paragraph("This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).",redFont));

        document.add(preface);
		// Start a new page
        document.newPage();
      * */

    }

    private void addEmptyLine(Paragraph paragraph, int number) {
            for (int i = 0; i < number; i++) {
                    paragraph.add(new Paragraph(" "));
            }
    }


}
